//void main() {
//}

//main(){
//}

//void main() => runApp(new MyApp());

//void main(List<String> arguments) {
//}

void main() {
  //1、main函数，程序入口，以上是几种main函数的写法
  //2、普通函数，如conmmonFunction
  //3、匿名函数，可作为参数进行传递
  Function printInfo = (String info) {
    print('infois ${info}');
  };
  var list = ['apples', 'bananas', 'oranges'];
  list.forEach(printInfo);
  //4、箭头函数，箭头函数是一种缩写，=> expr,相当于{return expr}
  list.forEach((item) => print(item));
  list.forEach((item) {
    print(item);
  });
  //5、立即执行函数,通过()来调用
  ((name) {
    print('my name is ${name}');
  })('jack');
  //6、闭包，闭包不同于回调函数，是为了解决函数外部无法使用内部变量而产生的一种解决办法，闭包有以下特点
  //  1:定义在一个函数内部的函数
  //  2:闭包可以提取到包裹函数的变量
  //  3:由于闭包被赋值到包裹函数外面的域，使得包裹函数及其内部变量也在这个域中，只有持有闭包的变量所在域的代码执行结束才得以释放
  test() {
    int count = 0;
    return () {
      print(count++);
    };
  }

  var fun = test();
  fun(); //0
  fun(); //1
  fun(); //2
  //7、顶级函数（高阶函数），Dart中可以不用在类中定义函数，而是直接基于dart文件顶层定义函数，这种函数我们一般称为顶层函数。最常见就是main函数
  //8、静态函数，静态函数就和Java中类似，依然使用static关键字来声明，然后必须是定义在类的内部的
}

class Person {
  static int getAge() => 20;//static修饰定义在类的内部。
}

void conmmonFunction(String param) {
  print(param);
}
